using System;
using System.Collections;
using System.Collections.Generic;

namespace Neturion.Dados
{
    /// <summary>
    /// 
    /// </summary>
    public class Assunto
    {
        private int _assuntoId;
        private string _codigo;
        private string _descricao;
        private DateTime? _inicioVigencia;
        private DateTime? _fimVigencia;
        private DateTime _dataCadastro;
        private int _prazoResolucao;
        private string _observacao;
        private TipoAssunto _tipoAssunto;
        private Funcionario _funcionarioResponsavel;
        private Setor _setorResponsavel;
        private IList _listaAssuntoProcedimentos;
        private IList _listaMotivosProtocolo;
        private NeturionLog _neturionLog;

        public Assunto()
        {
            _listaAssuntoProcedimentos = new List<AssuntoProcedimento>();
            _listaMotivosProtocolo = new List<MotivoProtocolo>();
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual int AssuntoId
        {
            get { return _assuntoId; }
            set { _assuntoId = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Descricao
        {
            get { return _descricao; }
            set { _descricao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual DateTime? InicioVigencia
        {
            get { return _inicioVigencia; }
            set { _inicioVigencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual DateTime? FimVigencia
        {
            get { return _fimVigencia; }
            set { _fimVigencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual DateTime DataCadastro
        {
            get { return _dataCadastro; }
            set { _dataCadastro = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual int PrazoResolucao
        {
            get { return _prazoResolucao; }
            set { _prazoResolucao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Observacao
        {
            get { return _observacao; }
            set { _observacao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual TipoAssunto TipoAssunto
        {
            get { return _tipoAssunto; }
            set { _tipoAssunto = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual Funcionario FuncionarioResponsavel
        {
            get { return _funcionarioResponsavel; }
            set { _funcionarioResponsavel = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual Setor SetorResponsavel
        {
            get { return _setorResponsavel; }
            set { _setorResponsavel = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaAssuntoProcedimentos
        {
            get { return _listaAssuntoProcedimentos; }
            set { _listaAssuntoProcedimentos = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaMotivosProtocolo
        {
            get { return _listaMotivosProtocolo; }
            set { _listaMotivosProtocolo = value; }
        }        

        /// <summary>
        /// 
        /// </summary>
        public virtual NeturionLog NeturionLog
        {
            get { return _neturionLog; }
            set { _neturionLog = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="procedimento"></param>
        public virtual void AdicionarProcedimento(AssuntoProcedimento assuntoProcedimento)
        {
            assuntoProcedimento.Assunto = this;
            ListaAssuntoProcedimentos.Add(assuntoProcedimento);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="procedimento"></param>
        public virtual void RemoverProcedimento(Procedimento procedimento)
        {
            ListaAssuntoProcedimentos.Remove(procedimento);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="motivoProtocolo"></param>
        public virtual void AdicionarMotivoProtocolo(MotivoProtocolo motivoProtocolo)
        {
            //motivoProtocolo.AdicionarAssunto(this);
            ListaMotivosProtocolo.Add(motivoProtocolo);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="motivoProtocolo"></param>
        public virtual void RemoverMotivoProtocolo(MotivoProtocolo motivoProtocolo)
        {
            ListaMotivosProtocolo.Remove(motivoProtocolo);
        }
    }
}